#ifndef __T_MENSAJE__
#define __T_MENSAJE__

#include "TDireccion.h"
#include "TPuerto.h"

#define MENSAJE_OK 0
#define MENSAJE_ERR_MEMORIA 1
#define MENSAJE_ERR_STRVACIO 2
#define MENSAJE_DEBUG 0

typedef enum {
	NO_PRIORITARIO = 0,
	PRIORITARIO
} TTipoMensaje;

typedef struct s_mensaje {
	TDireccion destino;
	TPuerto puerto;
	TTipoMensaje prioridad;
	char* texto;
	int tam;
} TMensaje;

/**
 *
 * @param
 * @param
 * @autor
 * @pre
 * @post
 */
int Mensaje_Crear(TMensaje* mensaje, TDireccion destino, char* texto, int prioridad, TPuerto puerto);

/**
 *
 * @param
 * @param
 * @autor
 * @pre
 * @post
 */
int Mensaje_Destruir(TMensaje* mensaje);

/**
 *
 * @param
 * @param
 * @autor
 * @pre
 * @post
 */
int Mensaje_ObtenerDireccion(TMensaje* mensaje, TDireccion* direccion);

/**
 *
 * @param
 * @param
 * @autor
 * @pre
 * @post
 */
int Mensaje_ObtenerTexto(TMensaje* mensaje, char** texto);

/**
 *
 * @param
 * @param
 * @autor
 * @pre
 * @post
 */
int Mensaje_ObtenerTamanioMensaje(TMensaje* mensaje, int* tamanio);

/**
 *
 * @param
 * @param
 * @autor
 * @pre
 * @post
 */
TTipoMensaje Mensaje_ObtenerPrioridad(TMensaje* mensaje);

/**
 *
 * @param
 * @param
 * @autor
 * @pre
 * @post
 */
TPuerto Mensaje_ObtenerPuerto(TMensaje* mensaje);

/**
 *
 * @param
 * @param
 * @autor
 * @pre
 * @post
 */
int Mensaje_CambiarPrioridad(TMensaje* mensaje, TTipoMensaje nueva_prioridad);

#endif
